package org.example;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpMethod;
import io.vertx.core.http.HttpServer;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.BodyHandler;
import org.example.handle.IndexHandle;

/**
 * 简单的路由使用
 *
 * @author lenovo
 *
 */
public class SimpleRouter extends AbstractVerticle {

    @Override
    public void start() throws Exception {

        // 创建HttpServer
        HttpServer server = vertx.createHttpServer();

        // 创建路由对象
        Router router = Router.router(vertx);
        router.route().handler(BodyHandler.create()); // 在路由的最前面，指定body的处理器

        // 监听/index地址
        router.route("/index").handler(request -> {
            request.response().end("INDEX SUCCESS");
        });
        router.route("/indexHandle").handler(new IndexHandle());

        // 监听/method地址
        router.route(HttpMethod.GET, "/method").handler(request -> {
            // 获取参数
            String param = request.request().getParam("param");
            System.out.println("接收到用户传递的参数为：" + param);
            request.response().end("method");
        });

        // 监听/post地址
        router.post("/post").handler(request -> {
            String res = request.body().asString(); // 获取到body体的数据
            System.out.println(res);
            request.response().end("post");
        });


        // 监听/index/*地址, 访问顺序控制
        router.route("/index/*").order(2).handler(request -> {
            request.response().end("Index");
        });
        router.route("/index/main").order(-1).handler(request -> {
            request.response().end("IndexMain");
        });

        // 所有匹配的规则都执行，可以通过requestContext 的next方法
        router.route("/continue/*").order(2).handler(request -> {

            System.out.println(1);
            request.next(); // 调下一个匹配规则
        });
        router.route("/continue/main").order(-1).handler(request -> {
            System.out.println("2");
            request.next(); // 调下一个匹配规则
        });


        // 把请求交给路由处理--------------------(1)
        server.requestHandler(router);
        server.listen(8888);
    }

    public static void main(String[] args) {
        Vertx.vertx().deployVerticle(new SimpleRouter());
    }

}
